{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6f32d781-84ab-4463-b995-ecede1b96e35",
   "metadata": {},
   "source": [
    "# 反向传播推导(迭代)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "02c69702-2d34-4168-8a57-5c3a7ff3a230",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "864cc3ec-991b-4f3b-a627-b134b1664599",
   "metadata": {},
   "source": [
    "## 定义线性方程 \n",
    " - 我的预测的线形方式是 $$y = 2x + 1$$\n",
    " - 为了简化我们只求w，也就是假设b是已知的 $$y' = wx + 1$$\n",
    " - 定义需要预测的线形方程 linreg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a46588d4-384c-4bcd-a092-35639a57ecc1",
   "metadata": {},
   "outputs": [],
   "source": [
    "def linreg(x,w):\n",
    "    return w*x + 1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "896b720c-e5ba-41c5-b657-58c49550bd3d",
   "metadata": {},
   "source": [
    "## 定义损失函数(最小二乘法)\n",
    "\n",
    " $$ L = \\frac{1}{2}(y'-y)^2 $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f4b022eb-ac54-4c58-96ce-3ee977ba9c94",
   "metadata": {},
   "outputs": [],
   "source": [
    "def squared_loss(h_hat,y):\n",
    "    return (h_hat-y)**2/2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba7661da-fa0b-428e-a37e-2e4a744a5a68",
   "metadata": {},
   "source": [
    "## 随机梯度下降"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e5c6e8a5-bee4-42bf-9de1-de2462f74700",
   "metadata": {},
   "outputs": [],
   "source": [
    "def sgd(w, lr): \n",
    "    with torch.no_grad():\n",
    "        w -= lr * w.grad \n",
    "        w.grad.zero_()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed6c799f-9a27-40e5-8b10-8f9827ba9dca",
   "metadata": {},
   "source": [
    "## 用深度学习中术语重新整理赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4d1e94ce-8478-474d-b706-5bbc5f7e5ad1",
   "metadata": {},
   "outputs": [],
   "source": [
    "net = linreg\n",
    "loss = squared_loss\n",
    "learn_rate = 0.1 #学习率\n",
    "num_epochs = 5   # 训练轮数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "534e8bb0-c024-44b3-9018-b1d48765dcfe",
   "metadata": {},
   "source": [
    "# 初始化训练数据集\n",
    " - 真实的w是2\n",
    " - 目标函数是 $$ y = 2x + 1 $$\n",
    " - 我们的训练数据集x = [1,2,3,4,5] \n",
    " - 带入目标函数的结果 y = [3,5,7,9,11]\n",
    " - 预测的w初始可以是随机的\n",
    " - torch.rand(1)从区间[0,1)的均匀分布中随机抽取一个随机数生成一个张量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "995a4751-95ed-4482-850a-9406411fc425",
   "metadata": {},
   "outputs": [],
   "source": [
    "true_w = torch.tensor(2)\n",
    "w = torch.rand(1, dtype=torch.float64, requires_grad=True) # requires_grad=True 代表自动求导"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "47b25189-1dea-4ecf-8adc-6045707e760d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def synthetic_data(w, num_examples): \n",
    "    X = torch.arange(1,num_examples+1)\n",
    "    y = X*w + 1\n",
    "    return X, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f93daea7-dacb-4669-b350-0d3437df4392",
   "metadata": {},
   "outputs": [],
   "source": [
    "features, labels = synthetic_data(true_w, num_epochs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "9cf4ffbb-97c7-47da-842f-4985086c89b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1, 2, 3, 4, 5])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b5090057-9af6-45bf-98f4-3ec5be3bdd00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([ 3,  5,  7,  9, 11])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14071b8d-2762-44ac-bd15-57b786f73f52",
   "metadata": {},
   "source": [
    "## 初始数据的坐标图\n",
    " > (1,3) , (2,5) , (3,7) , (4,9) ,(5,11)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "30b988f4-6942-43ca-946e-90abe06aed6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7faa263fad00>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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u6ZPn65p06ZJkq666iq9/PLL2r17t9NdAQCAJOT4bZdx48bpnXfe0YcffihJ+uc//6lt27apoKCg1fbhcFihUChqAwAA3ZfjVz6WLFmiUCikYcOGKTU1VU1NTXrsscc0a9asVtuXlpaqpKTE6TIAAEAX5fiVj1dffVUvvviiXnrpJVVWVmrt2rV6/PHHtXbt2lbbFxUVKRgMRra6ujqnSwIAAF2Iyzj8GIrf79eSJUu0cOHCyL5HH31U69at0wcffHDB74dCIXm9XgWDQWVkZDhZGgAAiJNYzt+OX/n4/PPPlZIS/bOpqalqbm52uisAAJCEHF/zUVhYqMcee0wDBw7U8OHDtW/fPj3xxBOaN2+e010BAIAk5Phtl4aGBi1dulTr169XfX29srOzNXPmTD388MNKS0u74Pe57QIAQPKJ5fztePi4WIQPAACST0LXfAAAALSH8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArCJ8AAAAqwgfAADAKsIHAACwivABAACsInwAAACrCB8AAMAqwgcAALCK8AEAAKwifAAAAKsIHwAAwCrCBwAAsIrwAQAArOqV6AIA9AxNzUa7a0+rvqFR/dI9GpOTqdQUV6LLApAAjoePq666SseOHWux/0c/+pFWrlzpdHcAkkB5TUAlbxxQINgY2efzelRcmKupeb4EVgYgERy/7VJRUaFAIBDZNm3aJEm6++67ne4KQBIorwlowbrKqOAhSSeDjVqwrlLlNYEEVQYgURwPH3379lVWVlZke/PNNzVkyBBNmDDB6a4AdHFNzUYlbxyQaeXYuX0lbxxQU3NrLQB0V3FdcPqf//xH69at07x58+RytX5vNxwOKxQKRW0AuofdtadbXPH4OiMpEGzU7trT9ooCkHBxDR8bNmzQZ599pu9973tttiktLZXX641sfr8/niUBsKi+oe3g0Zl2ALqHuIaP3//+9yooKFB2dnabbYqKihQMBiNbXV1dPEsCYFG/dI+j7QB0D3F71PbYsWN6++239frrr7fbzu12y+12x6sMAAk0JidTPq9HJ4ONra77cEnK8n712C2AniNuVz5Wr16tfv36adq0afHqAkAX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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(features, labels )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9aa64d59-fb69-432c-a3a4-72844c827b2d",
   "metadata": {},
   "source": [
    "## “训练”"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e00115de-e234-455d-a209-9fa846f5bf67",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 1, l tensor([0.9658], dtype=torch.float64, grad_fn=<DivBackward0>)\n",
      "epoch 1, w tensor([0.7492], dtype=torch.float64, requires_grad=True)\n",
      "epoch 2, l tensor([3.1291], dtype=torch.float64, grad_fn=<DivBackward0>)\n",
      "epoch 2, w tensor([1.2495], dtype=torch.float64, requires_grad=True)\n",
      "epoch 3, l tensor([2.5346], dtype=torch.float64, grad_fn=<DivBackward0>)\n",
      "epoch 3, w tensor([1.9250], dtype=torch.float64, requires_grad=True)\n",
      "epoch 4, l tensor([0.0451], dtype=torch.float64, grad_fn=<DivBackward0>)\n",
      "epoch 4, w tensor([2.0450], dtype=torch.float64, requires_grad=True)\n",
      "epoch 5, l tensor([0.0253], dtype=torch.float64, grad_fn=<DivBackward0>)\n",
      "epoch 5, w tensor([1.9325], dtype=torch.float64, requires_grad=True)\n"
     ]
    }
   ],
   "source": [
    "for i in range(num_epochs):\n",
    "    l = loss(net(features[i], w), labels[i]) \n",
    "    print(f\"epoch {i + 1}, l {l}\")\n",
    "    l.backward()\n",
    "    sgd(w, learn_rate) # 使用参数的梯度更新参数\n",
    "    print(f'epoch {i + 1}, w {w}')\n",
    "        \n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "d5afc0de-01ba-4324-94e6-e1183b3ffb14",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1.9325], dtype=torch.float64, requires_grad=True)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9489f309-307b-40ce-8f9e-b9e081923946",
   "metadata": {},
   "source": [
    "## 通过得到训练后的w带入方程，得到训练后方程预测的坐标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "3928f2f5-92d8-47fd-8d65-9eec09d53998",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1.9325], dtype=torch.float64)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_x = features\n",
    "test_y = w.detach()*features + 1\n",
    "w.detach()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f78bf286-3646-4806-8c60-e17959e6a14f",
   "metadata": {},
   "source": [
    "## 将训练数据集和预测数据集放在一个图里"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "018c10a1-a8f3-4150-b2b7-c0c38c74ec67",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7faa1fbd0670>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kdq1a+Pj40ODBg345Zdf8mG2uXcrx/fNN99kOn8+Pj75NOPcmzp1KuHh4Rk3L2ratCmLFy/Odh1XOX+Q++NztfN3vbFjx2IymRgyZEi241zpHF4tJ8fnaudw1KhRmeZbu3btbNdxxvkrVOEjMTGRiIgIPv300xyNj42NpUOHDrRs2ZKYmBiGDBnC008/zZIlS/J4prcmt8f3jz179nDy5MmMnzJlyuTRDG/PypUr6d+/P3/99RdLly4lNTWVNm3akJiYeMN11q1bR+/evenXrx/R0dF07tyZzp07s3379nycec7cyvGB/S6EV5+/w4cP59OMc69ixYqMHTuWTZs2sXHjRu6//346derEjh07shzvSucPcn984Frn72obNmxg2rRphIeHZzvO1c7hP3J6fOB657BevXrXzHfNmjU3HOu082cUUoAxb968bMe88sorRr169a55rGfPnkbbtm3zcGaOkZPj++OPPwzAuHjxYr7MydHOnDljAMbKlStvOKZHjx5Ghw4drnnsrrvuMp599tm8nt5ty8nxff3110ZgYGD+TSoPlChRwvjyyy+zfM6Vz98/sjs+Vz1/8fHxRs2aNY2lS5ca9913nzF48OAbjnXFc5ib43O1czhy5EgjIiIix+Oddf4K1TsfufXnn3/SqlWrax5r27Ytf/75p5NmlDcaNmxI+fLlad26NWvXrnX2dHIsLi4OgODg4BuOceVzmJPjA0hISKBy5cqEhobe9K/sgsRqtTJjxgwSExNp2rRplmNc+fzl5PjANc9f//796dChQ6ZzkxVXPIe5OT5wvXO4b98+QkJCqFatGo8++ihHjhy54Vhnnb8C98Vy+enUqVOULVv2msfKli2L2Wzm8uXL+Pr6OmlmjlG+fHk+++wzmjRpgsVi4csvv6RFixasX7+eRo0aOXt62bLZbAwZMoR77rmH+vXr33Dcjc5hQe21/COnxxcWFsZ///tfwsPDiYuLY/z48TRr1owdO3bk+Rcw3qpt27bRtGlTkpOTKV68OPPmzaNu3bpZjnXF85eb43PF8zdjxgw2b97Mhg0bcjTe1c5hbo/P1c7hXXfdxTfffENYWBgnT55k9OjR3HvvvWzfvh1/f/9M4511/op0+CjswsLCCAsLy1hu1qwZBw4c4OOPP+Z///ufE2d2c/3792f79u3ZXqt0ZTk9vqZNm17zV3WzZs2oU6cO06ZN45133snrad6SsLAwYmJiiIuLY/bs2TzxxBOsXLnyhi/QriY3x+dq5+/o0aMMHjyYpUuXFuhS5a26leNztXPYvn37jP8dHh7OXXfdReXKlZk1axb9+vVz4syuVaTDR7ly5Th9+vQ1j50+fZqAgACXf9fjRu68884C/4I+YMAAFi5cyKpVq276l8WNzmG5cuXycoq3JTfHdz1PT08iIyPZv39/Hs3u9nl5eVGjRg0AGjduzIYNG5g4cSLTpk3LNNYVz19uju96Bf38bdq0iTNnzlzzzqjVamXVqlVMmTIFi8WCu7v7Neu40jm8leO7XkE/h9cLCgqiVq1aN5yvs85fke58NG3alOXLl1/z2NKlS7O9fuvqYmJiKF++vLOnkSXDMBgwYADz5s3j999/p2rVqjddx5XO4a0c3/WsVivbtm0rsOcwKzabDYvFkuVzrnT+biS747teQT9/DzzwANu2bSMmJibjp0mTJjz66KPExMRk+cLsSufwVo7vegX9HF4vISGBAwcO3HC+Tjt/eVpnzWfx8fFGdHS0ER0dbQDGhAkTjOjoaOPw4cOGYRjG8OHDjcceeyxj/MGDBw0/Pz/j5ZdfNnbt2mV8+umnhru7u/Hrr7866xCyldvj+/jjj4358+cb+/btM7Zt22YMHjzYcHNzM5YtW+asQ8jW888/bwQGBhorVqwwTp48mfGTlJSUMeaxxx4zhg8fnrG8du1aw8PDwxg/fryxa9cuY+TIkYanp6exbds2ZxxCtm7l+EaPHm0sWbLEOHDggLFp0yajV69eho+Pj7Fjxw5nHMJNDR8+3Fi5cqURGxtrbN261Rg+fLhhMpmM3377zTAM1z5/hpH743O185eV6z8N4urn8Ho3Oz5XO4cvvfSSsWLFCiM2NtZYu3at0apVK6NUqVLGmTNnDMMoOOevUIWPfz5aev3PE088YRiGYTzxxBPGfffdl2mdhg0bGl5eXka1atWMr7/+Ot/nnVO5Pb5x48YZ1atXN3x8fIzg4GCjRYsWxu+//+6cyedAVscGXHNO7rvvvozj/cesWbOMWrVqGV5eXka9evWMRYsW5e/Ec+hWjm/IkCFGpUqVDC8vL6Ns2bLGgw8+aGzevDn/J59Dffv2NSpXrmx4eXkZpUuXNh544IGMF2bDcO3zZxi5Pz5XO39Zuf7F2dXP4fVudnyudg579uxplC9f3vDy8jIqVKhg9OzZ09i/f3/G8wXl/JkMwzDy9r0VERERkSuKdOdDRERE8p/Ch4iIiOQrhQ8RERHJVwofIiIikq8UPkRERCRfKXyIiIhIvlL4EBERkXyl8CEiIiL5SuFDRERE8pXCh4iIiOQrhQ8RERHJVwofIiIikq/+H0uzsAmB4LD2AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "labels_arr = torch.cat((labels.reshape((-1,1)),test_y.reshape((-1,1))),dim=1)\n",
    "plt.plot(features,labels_arr.numpy())\n",
    "plt.legend([\"y=2x+1\",\"trans line\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3f7de686-f07c-4c4a-a4b8-f16bb8fd0e1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7faa267b2130>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kdq1a+Pj40ODBg345Zdf8mG2uXcrx/fNN99kOn8+Pj75NOPcmzp1KuHh4Rk3L2ratCmLFy/Odh1XOX+Q++NztfN3vbFjx2IymRgyZEi241zpHF4tJ8fnaudw1KhRmeZbu3btbNdxxvkrVOEjMTGRiIgIPv300xyNj42NpUOHDrRs2ZKYmBiGDBnC008/zZIlS/J4prcmt8f3jz179nDy5MmMnzJlyuTRDG/PypUr6d+/P3/99RdLly4lNTWVNm3akJiYeMN11q1bR+/evenXrx/R0dF07tyZzp07s3379nycec7cyvGB/S6EV5+/w4cP59OMc69ixYqMHTuWTZs2sXHjRu6//346derEjh07shzvSucPcn984Frn72obNmxg2rRphIeHZzvO1c7hP3J6fOB657BevXrXzHfNmjU3HOu082cUUoAxb968bMe88sorRr169a55rGfPnkbbtm3zcGaOkZPj++OPPwzAuHjxYr7MydHOnDljAMbKlStvOKZHjx5Ghw4drnnsrrvuMp599tm8nt5ty8nxff3110ZgYGD+TSoPlChRwvjyyy+zfM6Vz98/sjs+Vz1/8fHxRs2aNY2lS5ca9913nzF48OAbjnXFc5ib43O1czhy5EgjIiIix+Oddf4K1TsfufXnn3/SqlWrax5r27Ytf/75p5NmlDcaNmxI+fLlad26NWvXrnX2dHIsLi4OgODg4BuOceVzmJPjA0hISKBy5cqEhobe9K/sgsRqtTJjxgwSExNp2rRplmNc+fzl5PjANc9f//796dChQ6ZzkxVXPIe5OT5wvXO4b98+QkJCqFatGo8++ihHjhy54Vhnnb8C98Vy+enUqVOULVv2msfKli2L2Wzm8uXL+Pr6OmlmjlG+fHk+++wzmjRpgsVi4csvv6RFixasX7+eRo0aOXt62bLZbAwZMoR77rmH+vXr33Dcjc5hQe21/COnxxcWFsZ///tfwsPDiYuLY/z48TRr1owdO3bk+Rcw3qpt27bRtGlTkpOTKV68OPPmzaNu3bpZjnXF85eb43PF8zdjxgw2b97Mhg0bcjTe1c5hbo/P1c7hXXfdxTfffENYWBgnT55k9OjR3HvvvWzfvh1/f/9M4511/op0+CjswsLCCAsLy1hu1qwZBw4c4OOPP+Z///ufE2d2c/3792f79u3ZXqt0ZTk9vqZNm17zV3WzZs2oU6cO06ZN45133snrad6SsLAwYmJiiIuLY/bs2TzxxBOsXLnyhi/QriY3x+dq5+/o0aMMHjyYpUuXFuhS5a26leNztXPYvn37jP8dHh7OXXfdReXKlZk1axb9+vVz4syuVaTDR7ly5Th9+vQ1j50+fZqAgACXf9fjRu68884C/4I+YMAAFi5cyKpVq276l8WNzmG5cuXycoq3JTfHdz1PT08iIyPZv39/Hs3u9nl5eVGjRg0AGjduzIYNG5g4cSLTpk3LNNYVz19uju96Bf38bdq0iTNnzlzzzqjVamXVqlVMmTIFi8WCu7v7Neu40jm8leO7XkE/h9cLCgqiVq1aN5yvs85fke58NG3alOXLl1/z2NKlS7O9fuvqYmJiKF++vLOnkSXDMBgwYADz5s3j999/p2rVqjddx5XO4a0c3/WsVivbtm0rsOcwKzabDYvFkuVzrnT+biS747teQT9/DzzwANu2bSMmJibjp0mTJjz66KPExMRk+cLsSufwVo7vegX9HF4vISGBAwcO3HC+Tjt/eVpnzWfx8fFGdHS0ER0dbQDGhAkTjOjoaOPw4cOGYRjG8OHDjcceeyxj/MGDBw0/Pz/j5ZdfNnbt2mV8+umnhru7u/Hrr7866xCyldvj+/jjj4358+cb+/btM7Zt22YMHjzYcHNzM5YtW+asQ8jW888/bwQGBhorVqwwTp48mfGTlJSUMeaxxx4zhg8fnrG8du1aw8PDwxg/fryxa9cuY+TIkYanp6exbds2ZxxCtm7l+EaPHm0sWbLEOHDggLFp0yajV69eho+Pj7Fjxw5nHMJNDR8+3Fi5cqURGxtrbN261Rg+fLhhMpmM3377zTAM1z5/hpH743O185eV6z8N4urn8Ho3Oz5XO4cvvfSSsWLFCiM2NtZYu3at0apVK6NUqVLGmTNnDMMoOOevUIWPfz5aev3PE088YRiGYTzxxBPGfffdl2mdhg0bGl5eXka1atWMr7/+Ot/nnVO5Pb5x48YZ1atXN3x8fIzg4GCjRYsWxu+//+6cyedAVscGXHNO7rvvvozj/cesWbOMWrVqGV5eXka9evWMRYsW5e/Ec+hWjm/IkCFGpUqVDC8vL6Ns2bLGgw8+aGzevDn/J59Dffv2NSpXrmx4eXkZpUuXNh544IGMF2bDcO3zZxi5Pz5XO39Zuf7F2dXP4fVudnyudg579uxplC9f3vDy8jIqVKhg9OzZ09i/f3/G8wXl/JkMwzDy9r0VERERkSuKdOdDRERE8p/Ch4iIiOQrhQ8RERHJVwofIiIikq8UPkRERCRfKXyIiIhIvlL4EBERkXyl8CEiIiL5SuFDRERE8pXCh4iIiOQrhQ8RERHJVwofIiIikq/+H0uzsAmB4LD2AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(features,labels)\n",
    "plt.plot(test_x,test_y)\n",
    "plt.legend([\"y=2x+1\",\"trans line\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6097dc15-0530-48fd-b036-49af9accd1f0",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
